package com.tfxy.hxl.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.tfxy.hxl.R;
import com.tfxy.hxl.entity.User;
import com.tfxy.hxl.entity.dto.LoginDTO;
import com.tfxy.hxl.service.UserService;
import com.tfxy.hxl.JwtUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.util.DigestUtils;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;
    // 用户注册
    @PostMapping("/register")
    public R register(@RequestBody User user) {
        // 检查用户名/手机号唯一性
        if (userService.getOne(new QueryWrapper<User>().eq("username", user.getUsername())) != null) {
            return R.error().message("用户名已存在");
        }
        if (userService.getOne(new QueryWrapper<User>().eq("phone", user.getPhone())) != null) {
            return R.error().message("手机号已注册");
        }
        // 密码加密
        user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
        boolean saved = userService.save(user);
        return saved ? R.ok().message("注册成功") : R.error().message("注册失败");
    }

    // 用户登录 - 放在路径变量之前
    @PostMapping("/login")
    public R login(@RequestBody LoginDTO loginDTO) {
        // 1. 查询用户
        User user = userService.getOne(
            new QueryWrapper<User>()
                .eq("username", loginDTO.getUsername())
                .eq("deleted", 0)
        );
        if (user == null) {
            return R.error().message("用户不存在");
        }
        // 2. 校验密码（假设用MD5加密）
        String inputPwd = DigestUtils.md5DigestAsHex(loginDTO.getPassword().getBytes());
        if (!user.getPassword().equals(inputPwd)) {
            return R.error().message("密码错误");
        }
        if (user.getStatus() != 1) {
            return R.error().message("用户已被禁用");
        }
        // 3. 生成JWT
        String token = JwtUtils.getJwtToken(String.valueOf(user.getId()), user.getUsername());
        return R.ok().data("token", token);
    }

    // 用户信息修改
    @PutMapping("/update")
    public R updateUser(@RequestBody User user) {
        boolean updated = userService.updateById(user);
        return updated ? R.ok().message("修改成功") : R.error().message("修改失败");
    }

    // 用户信息查询 - 路径变量放在最后
    @GetMapping("/{id}")
    public R getUser(@PathVariable Long id) {
        User user = userService.getById(id);
        return user != null ? R.ok().data("user", user) : R.error().message("用户不存在");
    }

    // 用户逻辑删除 - 路径变量放在最后
    @DeleteMapping("/{id}")
    public R deleteUser(@PathVariable Long id) {
        boolean removed = userService.removeById(id);
        return removed ? R.ok().message("删除成功") : R.error().message("删除失败");
    }
}
